package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.AttendanceSallaryTemplateItemAddDTO;
import org.jsola.hr.dto.AttendanceSallaryTemplateItemUpdateDTO;
import org.jsola.hr.query.AttendanceSallaryTemplateItemQuery;
import org.jsola.hr.vo.AttendanceSallaryTemplateItemListVO;
import org.jsola.hr.vo.AttendanceSallaryTemplateItemVO;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;

import java.util.List;

/**
 * 考勤工资模板配置项表
 *
 * @author zhr
 */
@Api(tags = "hr-考勤工资模板配置项表")
public interface IAttendanceSallaryTemplateItemControllerAPI {

    /**
     * 新增考勤工资模板配置项
     * @param attendanceSallaryTemplateItemAddDTO 新增考勤工资模板配置项表
     * @return 新增后的配置信息
     */
    @ApiOperation(value = "新增考勤工资模板配置项")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemAddDTO", dataType = "AttendanceSallaryTemplateItemAddDTO", value = "新增考勤工资模板配置项表数组", paramType = "body")
    })
    Result<AttendanceSallaryTemplateItemVO> addConfig(AttendanceSallaryTemplateItemAddDTO attendanceSallaryTemplateItemAddDTO);

    /**
     * 查询工资模板详情
     * @param attendanceSallaryTemplateItemQuery 查询参数
     * @return 模板详情分页
     */
    @ApiOperation(value = "查询工资模板详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemQuery", dataType = "AttendanceSallaryTemplateItemQuery", value = "考勤工资模板配置项表查询参数", paramType = "query")
    })
    Result<Page<AttendanceSallaryTemplateItemListVO>> queryTemplateInfoPage(AttendanceSallaryTemplateItemQuery attendanceSallaryTemplateItemQuery);

    /**
     * 批量修改考勤工资模板配置项
     * @param attendanceSallaryTemplateItemUpdateDTO 考勤工资模板配置项表新增实体
     * @return 保存成功的数据个数
     */
    @ApiOperation(value = "批量修改考勤工资模板配置项")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemUpdateDTO", dataType = "AttendanceSallaryTemplateItemUpdateDTO", value = "修改考勤工资模板配置项表", paramType = "body",allowMultiple = true)
    })
    Result<Integer> batchUpdate(AttendanceSallaryTemplateItemUpdateDTO attendanceSallaryTemplateItemUpdateDTO);

    /**
     * 下载考勤工资模板
     * @param attendanceSallaryTemplateId 考勤工资模板id
     * @return 考勤工资模板Excel
     */
    @ApiOperation(value = "下载考勤工资模板")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateId", dataType = "String", value = "考勤工资模板id", paramType = "path")
    })
    ResponseEntity<Resource> downloadAttendanceSallaryTemplate(String attendanceSallaryTemplateId);


    /**
     * 批量新增考勤工资模板配置项
     * @param attendanceSallaryTemplateItemAddDTO 新增考勤工资模板配置项表
     * @return 保存成功的数据个数
     */
    @ApiOperation(value = "批量新增考勤工资模板配置项")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemAddDTO", dataType = "AttendanceSallaryTemplateItemAddDTO", value = "新增考勤工资模板配置项表数组", paramType = "body")
    })
    Result<Integer> batchSave(AttendanceSallaryTemplateItemAddDTO attendanceSallaryTemplateItemAddDTO);



    /**
     * 分页查询工资模板详情
     * @param attendanceSallaryTemplateItemQuery 考勤工资模板配置项表查询参数
     * @return page
     */
    @ApiOperation(value="分页查询工资模板详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemQuery", dataType = "AttendanceSallaryTemplateItemQuery", value = "考勤工资模板配置项表查询参数", paramType = "query")
    })
    Result<Page<AttendanceSallaryTemplateItemListVO>> getAttendanceSallaryTemplateInfo(AttendanceSallaryTemplateItemQuery attendanceSallaryTemplateItemQuery);


    /**
     * 新增考勤工资模板配置项表
     * @param attendanceSallaryTemplateItemAddDTO 考勤工资模板配置项表新增实体
     * @return 考勤工资模板配置项表展示对象
     */
    @ApiOperation(value = "新增考勤工资模板配置项表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemAddDTO", dataType = "AttendanceSallaryTemplateItemAddDTO", value = "新增考勤工资模板配置项表", paramType = "body")
    })
    Result<AttendanceSallaryTemplateItemVO> save(AttendanceSallaryTemplateItemAddDTO attendanceSallaryTemplateItemAddDTO);


    /**
     * 修改考勤工资模板配置项表
     * @param attendanceSallaryTemplateItemUpdateDTO 考勤工资模板配置项表
     * @return 更新数量
     */
    @ApiOperation(value = "修改考勤工资模板配置项表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemUpdateDTO", dataType = "AttendanceSallaryTemplateItemUpdateDTO", value = "修改考勤工资模板配置项表", paramType = "body")
    })
    Result<Integer> update(AttendanceSallaryTemplateItemUpdateDTO attendanceSallaryTemplateItemUpdateDTO);




    /**
     * 删除单个考勤工资模板配置项表，彻底删除
     * @param attendanceSallaryTemplateItemId 考勤工资模板配置项表id
     * @return 删除数量
     */
    @ApiOperation(value="删除单个考勤工资模板配置项表，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemId", dataType = "String", value = "考勤工资模板配置项表id", paramType = "path")
    })
    Result<Integer> delete(String attendanceSallaryTemplateItemId);


    /**
     * 批量删除考勤工资模板配置项表，彻底删除
     * @param attendanceSallaryTemplateItemIds 考勤工资模板配置项表id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除考勤工资模板配置项表，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemIds", dataType = "String[]", value = "考勤工资模板配置项表id数组", paramType = "body" ,allowMultiple = true)
    })
    Result<Integer> deleteBatch(String[] attendanceSallaryTemplateItemIds);


    /**
     * 根据考勤工资模板配置项表id查询考勤工资模板配置项表详情
     * @param attendanceSallaryTemplateItemId 考勤工资模板配置项表id
     * @return 考勤工资模板配置项表详情
     */
    @ApiOperation(value="根据考勤工资模板配置项表id查询考勤工资模板配置项表详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemId", dataType = "String", value = "考勤工资模板配置项表id", paramType = "path")
    })
    Result<AttendanceSallaryTemplateItemVO> findById(String attendanceSallaryTemplateItemId);


    /**
     * 查询考勤工资模板配置项表
     * @param attendanceSallaryTemplateItemQuery 考勤工资模板配置项表查询参数
     * @return page
     */
    @ApiOperation(value="查询考勤工资模板配置项表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemQuery", dataType = "AttendanceSallaryTemplateItemQuery", value = "考勤工资模板配置项表查询参数", paramType = "query")
    })
    Result<List<AttendanceSallaryTemplateItemListVO>> listAll(AttendanceSallaryTemplateItemQuery attendanceSallaryTemplateItemQuery);


     /**
     * 分页查询考勤工资模板配置项表
     * @param attendanceSallaryTemplateItemQuery 考勤工资模板配置项表查询参数
     * @return page
     */
    @ApiOperation(value="分页查询考勤工资模板配置项表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "attendanceSallaryTemplateItemQuery", dataType = "AttendanceSallaryTemplateItemQuery", value = "考勤工资模板配置项表查询参数", paramType = "query")
    })
    Result<Page<AttendanceSallaryTemplateItemListVO>> page(AttendanceSallaryTemplateItemQuery attendanceSallaryTemplateItemQuery);


}

